자바스크립트? 장점, 단점
2019-12-30
오늘 모 회사의 면접을 봤다. 거기서 받은 질문 중 하나가 언어에 관련된 질문이었는데
자바와 자바스크립트 언어를 중점적으로 공부하셨는데, 두 언어에 대해서 어떻게 생각하시나요? 취향이라던지 편하게 이야기해주세요.
위와 같은 질문이었다. 이 질문을 들은 나는 진짜로 편한마음으로 대답을 했는데, 예상외로 잘못된 부분에 대해 엄격하게 지적해주셨다. 지적을 듣고는 내가 쓰는 언어를 잘 알지도 못한채 사용하고 있었다는 생각이 들었다. 그래서 오늘은 자바스크립트에 자료조사를하고 정리해보고자한다.
자바스크립트의 치명적인 단점이 뭐라고 생각하시나요?
이 글에는 과거 면접에서 글의 제목과 같은 질문을 받았고 그에대해 나름대로의 답을 찾는과정이 적혀있다. 그 답을 찾아가는 과정이 흥미로워 정리해보았다.
-
위 글의 저자가 생각하는 자바스크립트의 단점
- 브라우저에 종속적이다.
- 브라우저에서 동작하는 자바스크립트는 브라우저에 종속적이다. 그말은 어떤 브라우저에서 동작하느냐에따라 신경을 써주어야 할 부분이 많다는 것이고, 잘 돌아가던 코드가 어느 날 갑자기 브라우저의 정책이나 지원에 따라 이상하게 작동할 수 있다는 것이다.
- 이해하기 어려운 코드를 만들 수 있는 자바스크립트의 this
- 잘만 사용한다면 좋겠지만, 대부분의 경우 라이브러리나 도구를 개발하는 사람들이 언어의 맥락을 교묘히 왜곡시켜 특정한 요건을 구현하는데 사용하는 정도인 것 같다. 하지만 면접관이 원하는 답은 아니었다고 생각한다.
- 함수형 프로그래밍을 지원하는 자바스크립트가 언어차원에서 immutable함을 제공하지 않는다는 것
- 함수형 프로그래밍을 지원하는 것이 장점인 자바스크립트인데, 함수형 프로그래밍과 뗄 수 없는 관계인 불변셩을 지원하지 않는다니 꽤 모순적이다. 아니 모순을 넘어서 함수형이 대세로 떠오르는 요즘 치명적인 단점이라고 대답해도 괜찮지않을까?
- 자바스크립트 객체는 너무나도 동적이다. 언제든 속성을 추가, 삭제, 수정할 수 있다.
const
라는 키워드가 존재하지만 주소값 자체의 변경은 막을 수 있더라도 객체 내부의 속성이 변경되는 것은 막지 못한다. 자바스크립트 개발자들이 불변성을 지키기위해Object.assign
,Object.freeze
등 언어적 측면의 노력이 있지만 시스템에서 깊은 깊이까지의 불변성을 보장해 주지 못한다. 그래서 우리는immutable.js
같은 라이브러리 도움을 받는다.-
저자의 면접에 대한 생각.
면접관이 원햇던 대답이 궁금하긴 하다. 가끔은 내게 질문을 던졌던 면접관을 찾아가서 “당신이 원했던 대답이 이 중에 있습니까?”라고 물어고 싶기도 하다. 그러나 그 분께서 원하는 대답을 들은들 무슨 의미가 있나 싶다. 분명 그것 말고도 더 많은 단점이 존재하고 사람마다 느끼는 단점의 온도차가 심한 것을.
내가 써놓은 자바스크립트의 단점들 뿐만 아니라 더 많고 많은 단점들 중에서, 운좋게 면접관이 생각했던 단점 한 개를 찍어 맞췄다면 합격에 가까워 졌을 수도 있었겠다라는 생각을 하니 면접도 참 운이 중요하겠다는 생각이든다. 이야기가 왜 여기까지 흘러오고 있는지 모르겠지만 면접에서 떨어진 모든 숨은 보석들이 너무 낙심하거나 자책하지 않았으면 좋겠다. 면접은 정말 운이 끼치는 영향이 생각보다 크기 때문이다.
자바스크립트의 특징과 장단점(지속 업데이트 예정)
여러 블로그들을 종합해서 정리해보았다. 참고한 블로그들은 아래와 같다.
댓글에 제 블로그에 내용 일부를 실었고 원치않으면 삭제하겠다는 내용을 입력하고싶었으나 댓글 오류로 댓글이 작성되지 않는 블로그들이 있었습니다. 만약 이 글을 보게되시고 삭제를 원하시면 이메일로 연락주세요!
-
자바스크립트의 특징
- 인터프리터 언어이다.
- 인터프리터 방식은 컴파일이 필요 없이 언어를 한 줄씩 읽어서 실행한다. 컴파일 과정이 없어 실행에 이르는 시간은 단축되지만 코드가 노출된다는 단점이 있다.
- 객체 지향 언어이다.
- 자바스크립트의 함수는 일급 객체이다.
-
일급 객체는 다음과 같은 조건을 포함한다.(ECMAScript Specification 참조)
- 변수에 저장할 수 있어야 한다.
- 함수의 파라미터로 전달할 수 있어야 한다.
- 반환값으로 사용할 수 있어야 한다.
- 자료구조에 저장할 수 있어야 한다.
- 프로토타입 기반 언어이다.
-
자바스크립트 장점
- 인터프리터 언어로 컴파일 과정 없이 빠르게 실행 될 수 있다.
- 일급 객체 언어로 개발자가 능력이 된다면 함수를 통하여 무한대에 가까운 가능성의 언어를 개발할 수 있다.
- 웹 브라우저 상에 스크립트 엔진이 내장되어 있어 시스템 환경 등 플랫폼에 구애 받지 않고 개발되어 브라우저 상에서 사용가능하다.
-
자바스크립트 단점
- 인터프리터 언어로 컴파일 과정을 거치지 않아 코드가 노출된다.
- 브라우저 상에서 소스를 변경하여 사용자가 임의로 기능을 실행할 수 있다.